package com.zhku.zhny.util;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
public class FileOperationUtil {

	/**
	 * 上传图片，并返回request请求所提交的数据
	 * @param request
	 * @param filePath
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public static Map<String, String[]> upload(HttpServletRequest request, String filePath) throws Exception {
		// 创建一个Map，用于存放表单数据
		Map<String, String[]> map = new HashMap<String, String[]>();
		// 创建一个DiskFileItemFactory工厂类对象
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 创建一个ServletFileUpload核心对象
		ServletFileUpload sfu = new ServletFileUpload(factory);
		sfu.setHeaderEncoding("UTF-8");
		List<FileItem> fileItems = new ArrayList<FileItem>(0);
		// 解析request对象，并得到一个表单项的集合
		fileItems = sfu.parseRequest(request);
		// 遍历表单项集合数据
		for (FileItem fileItem : fileItems) {
			if (fileItem.isFormField()) {// 普通表单项
				String name = fileItem.getFieldName();// 得到字段名
				String value = fileItem.getString("UTF-8");// 得到字段值
				map.put(name, new String[] { value });
			} else { // 文件上传项
				File storeDirectory = new File(filePath); // 将图片存放在本地，通过配置tomcat虚拟目录关联
				if (!storeDirectory.exists()) {
					storeDirectory.mkdirs(); // 创建目录
				}
				String fileName = fileItem.getName();
				if (fileName != null) {
					fileName = FilenameUtils.getName(fileName);// 保证不同浏览器得到的文件名都统一
				}
				String currentTime = DateConvertUtil.DateToString(new Date());
				fileName = "IMG_" + currentTime + "_" + RandomIdFactory.getRandomId() + "_" + fileName; // 防止同名文件覆盖
				fileItem.write(new File(storeDirectory, fileName));// 上传文件
				fileItem.delete();// 删除临时文件
				map.put(fileItem.getFieldName(), new String[] { fileName });
			}
		}
		return map;
	}
}
